home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Auge 4000 / Auge 4000 #77 (1994-02-10)(Amiga User Gruppe Einzugsgebiet 4000).zip / Auge 4000 #77 (1994-02-10)(Amiga User Gruppe Einzugsgebiet 4000).adf / Write / WRITE.lha / WRITEV3.371.lha / REXX / sc.wrx < prev    next >
Text File  |  1993-12-14  |  7KB  |  307 lines

  1. /* ARexx script for WRITE and SC_SCMSG communication */
  2.  
  3. /*
  4.  * written 20/09/1993 by Lars Hanke
  5.  * © 1993 by MGR-Software, Asgrad
  6.  * contact: mgr@asgard.bo.open.de
  7.  *
  8.  * Installation:
  9.  *    - set the 'helppath' variable following this comment to where your
  10.  *      SAS/C AmigaGuide files can be found. By default they are installed
  11.  *      to SC:Help/
  12.  *
  13.  *    - set the SCMSG tool's defaults by calling "SCMSG", Project menu,
  14.  *      "Set options" to:
  15.  *         Hidden
  16.  *         NoRexxOnly     - isn't supported by SCMSG otherwise
  17.  *         NoAutoEdit
  18.  *
  19.  *         PortName: ""
  20.  *      EditCommand: "rx sc.wrx init"
  21.  *         GotoFile: ""
  22.  *         GoToLine: ""
  23.  *
  24.  *      click "Use" and select "Save options" in the Project menu.
  25.  *
  26.  *    - add the following lines to your WRITE configuration file
  27.  *
  28.  *         /* SC support controls */
  29.  *
  30.  *         KEY "numpad control 2"       DoRexx "sc.wrx next" 1;
  31.  *         KEY "numpad control 8"       DoRexx "sc.wrx last" 1;
  32.  *         KEY "numpad control 7"       DoRexx "sc.wrx begin" 1;
  33.  *         KEY "numpad control 1"       DoRexx "sc.wrx end" 1;
  34.  *         KEY "numpad control enter"   DoRexx "sc.wrx correct" 1;
  35.  *         KEY "numpad alt     7"       DoRexx "sc.wrx build" 1;
  36.  *         KEY "numpad alt     1"       DoRexx "sc.wrx done" 1;
  37.  *         KEY "numpad control 5"       DoRexx "sc.wrx index" 1;
  38.  *
  39.  *
  40.  *    - compile your programs using the 'errrexx' compiler option for SC
  41.  *
  42.  * Operation:
  43.  *   As you probably have noted all operation hotkeys are situated on
  44.  *   the numeric keypad and qualified by control. As this is the way
  45.  *   of LSE's navigation functions you should be able to keep it in
  46.  *   mind easily:
  47.  *
  48.  *      Up: (8)   - goto previous message
  49.  *    Down: (2)   - goto next message
  50.  *    Home: (7)   - goto first message
  51.  *     End: (1)   - goto last message
  52.  *   Enter:       - remove current message and goto next one
  53.  *  Center: (5)   - display Guide page for message
  54.  *
  55.  *   The above commands move to the beginning of the line that caused the
  56.  *   error. New files are loaded automatically, if necessary. A security
  57.  *   request is done, if the current file was changed. The errormessage
  58.  *   is displayed in a standard text requester. Main control is qualified
  59.  *   with alt:
  60.  *
  61.  *          Home: - rebuild the current project
  62.  *           End: - quit the SCMSG program
  63.  *
  64.  *   From the above configuration example operation and the meaning of
  65.  *   the argument 'action' should be clear.
  66.  *
  67.  *   When the SCMSG window pops up, doubleclick any message you want to
  68.  *   start (or later go on) with
  69.  *
  70.  */
  71.  
  72. helppath = "XDOC:guides/help/"
  73.  
  74. ARG action
  75.  
  76. IF ~show('P',"SC_SCMSG") THEN
  77. DO
  78.   if (action = "INIT") then say "You should not invoke me manually!"
  79.   else do
  80.      if show('P',"WRITE") then
  81.      do
  82.         address 'WRITE'
  83.         'MessageOK (No SCMSG ARexx-server running)'
  84.         exit 0
  85.      end
  86.      else say "You should not invoke me manually!"
  87.   end
  88. END
  89.  
  90. IF ~show('P',"WRITE")
  91. THEN DO
  92.   if action = "INIT" then
  93.   do
  94.      ADDRESS "COMMAND"
  95.      "run >NIL: <NIL: dh0:Text/WRITE"
  96.      "WB:REXXC/WaitForPort <NIL: >NIL: WRITE"
  97.   end
  98.   else do
  99.      say 'call me with the "Init" option first'
  100.      exit 5
  101.   end
  102. END
  103.  
  104. IF action = "QUIT" then
  105. do
  106.   address "SC_SCMSG"
  107.   'quit'
  108.   exit 0
  109. end
  110.  
  111. options results
  112.  
  113. Port = getclip('SC_WRITE_PORT')
  114. ID = getclip('SC_WRITE_ID')
  115.  
  116. if action = "INIT" then
  117. do
  118.   address 'WRITE'
  119.   if ((Port == "") | ~show('P',Port)) then
  120.   do
  121.     'NEWED ""'
  122.     ID = RESULT
  123.     if ~setclip('SC_WRITE_ID',ID) then
  124.     do
  125.        "MessageOK (Kann kein ID Clipboard bekommen!)"
  126.        exit 20
  127.     end
  128.     OPENPORT ID
  129.     Port = RESULT
  130.     IF Port="" THEN DO
  131.        "MessageOK (Es konnte kein Port für SAS/C geöffnet werden)"
  132.        exit 20
  133.     end
  134.     if ~setclip('SC_WRITE_PORT',Port) then
  135.     do
  136.        "MessageOK (Kann kein Port Clipboard bekommen!\nBitte schliessen Sie das Fenster)"
  137.        WaitPort ID
  138.        exit 20
  139.     end
  140.   end
  141. end
  142. else do
  143.   if Port = "" then
  144.   do
  145.      address 'WRITE'
  146.      'MessageOK (Call me with the "Init" option first)'
  147.      exit 0
  148.   end
  149.   else if ~show('P',Port) then
  150.   do
  151.      address 'WRITE'
  152.      'MessageOK (The current window is not the master)'
  153.      exit 0
  154.   end
  155. end
  156.  
  157. if action ~= "INIT" then
  158. do
  159.   address 'SC_SCMSG'
  160.   select
  161.      when action = "NEXT" then 'next'
  162.      when action = "LAST" then 'prev'
  163.      when action = "BEGIN" then 'top'
  164.      when action = "END" then 'bottom'
  165.      when action = "CORRECT" then 'delete'
  166.      when action = "SELECT" then
  167.         do
  168.            'show activate'
  169.            exit 0
  170.         end
  171.      when action = "DONE" then 'quit'
  172.      when action = "BUILD" then 'build'
  173.      when action = "INDEX" then
  174.         do
  175.            'errnum'
  176.            num = RESULT
  177.            if num ~= "" then
  178.            do
  179.               num = right(num,3,'0')
  180.  
  181.               address 'COMMAND'
  182.               'run >nil: amigaguide' helppath||'scmsg.guide doc scm'||num
  183.               exit 0
  184.            end
  185.         end
  186.      otherwise action = "UNDEF"
  187.   end
  188. end
  189.  
  190. INTERPRET ADDRESS Port
  191.  
  192. select
  193.   when action = "DONE" then msg="SCMSG terminated"
  194.   when action = "BUILD" then msg="Rebuilding ..."
  195.   when action = "UNDEF" then msg="REXX-Error: undefined action code"
  196.   otherwise msg=""
  197. end
  198.  
  199. if msg ~= "" then
  200. do
  201.   'MessageOK "'||msg||'"'
  202.   exit 0
  203. end
  204.  
  205. 'GETVAR (_WinMode)'
  206. if( RESULT ~= 0 ) then 'WINDOW 0 0 0 0'
  207.  
  208. 'GETVAR (_FILENAME)'
  209. cfile = RESULT
  210.  
  211. address 'SC_SCMSG'
  212. 'FILE'
  213. nfile = RESULT
  214.  
  215. 'errnum'
  216. if RESULT = "" then
  217. do
  218.   'quit'
  219.   INTERPRET ADDRESS Port
  220.   'MessageOK (All errors corrected!)'
  221.   call setclip('SC_WRITE_PORT',"")
  222.   call setclip('SC_WRITE_ID',"")
  223.   exit(0)
  224. end
  225.  
  226. if (cfile ~= nfile) then
  227. do
  228.   INTERPRET ADDRESS Port
  229.  
  230.   'GETVAR (_Changed)'
  231.   if( RESULT = 1 ) then
  232.   do
  233.      'ASK "Your current file was changed!\nSave it?" "_Forget ^|_Save *"'
  234.      'GETVAR (_RN)'
  235.      if (RESULT ~= 0) then 'Save "'||cfile||'"'
  236.   end
  237.   'Open "'||nfile||'"'
  238.   address 'SC_SCMSG'
  239. end
  240.  
  241. 'line'
  242. line = RESULT
  243. 'text'
  244. msg = RESULT
  245. 'class'
  246. class = RESULT
  247.  
  248. INTERPRET ADDRESS Port
  249. 'GOTO 1' line
  250. txt = debrace(class||':' msg)
  251. "MessageOK ("||txt||")"
  252.  
  253. exit 0
  254.  
  255. debrace: procedure                          /* remove braces from texts */
  256.  
  257.   parse arg line
  258.  
  259.   do until p = 0                            /* replace parenthesa by braces, */
  260.      p = pos('(',line)                      /* because we use the former as  */
  261.      if p ~= 0 then                         /* quotes for WRITE itself.      */
  262.      do
  263.         line = delstr(line,p,1)
  264.         line = insert('{',line,p-1)
  265.      end
  266.   end
  267.  
  268.   do until p = 0
  269.      p = pos(')',line)
  270.      if p ~= 0 then
  271.      do
  272.         line = delstr(line,p,1)
  273.         line = insert('}',line,p-1)
  274.      end
  275.   end
  276.  
  277.   p = pos('"',line)                         /* replace " by ', for we also  */
  278.   do while p ~= 0                           /* need outer quotes            */
  279.      line = delstr(line,p,1)
  280.      line = insert("'",line,p-1)
  281.      p = pos('"',line)
  282.   end
  283.  
  284.   line = strip(line)
  285.   if length(line) > 230 then
  286.      line = left(line,230)                  /* we may only pass 255 chars a time */
  287.  
  288.   'GetVar (_WinWidth)'                      /* insert \n to stay in window */
  289.   width = RESULT
  290.   width = width-trunc(0.2*width)
  291.   l = length(line)
  292.   p = 1
  293.   do while l > width
  294.      p = p+width
  295.      s = left(line,p)
  296.      r = words(s)
  297.      i = wordindex(line,r)
  298.      line = insert("\n",line,i)
  299.      p = p+2
  300.      l = length(line) - (i+2);
  301.   end
  302.  
  303.   return line
  304.  
  305.  
  306.  
  307.